# 卢氏实质利率 = 名义利率-名义cpi-(M2增速-GDP)
from datetime import datetime
from src.utils.akcache import Cache
import akshare as ak
import pandas as pd
import matplotlib.pyplot as plt
import pandas_datareader as pdr



start_date='20000101'
ac = Cache(start_date=start_date)

bond_10y = ac.bond_zh_us_rate()

# 中国实质利率 = 中国名义利率-中国名义cpi-(M2增速-GDP)
# 读取中国十年期国债收益率（名义利率）
df_nominal_rate = bond_10y[['日期', '中国国债收益率2年']]
df_nominal_rate = df_nominal_rate.rename(columns={'中国国债收益率2年': '名义利率'})
df_nominal_rate['日期'] = pd.to_datetime(df_nominal_rate['日期'])
df_nominal_rate.set_index('日期',inplace=True)

# 名义利率
# 按月分组，统计“国债年收益率”均值
df_nominal_rate_monthly = df_nominal_rate.resample('ME').mean()
# 将索引日期改为年月格式（例如'2023-05'），类型为字符串
df_nominal_rate_monthly.index = df_nominal_rate_monthly.index.to_period('M')


df_cpi = ac.macro_china_cpi_yearly()
df_cpi['日期'] = pd.to_datetime(df_cpi['日期'])
df_cpi.set_index('日期',inplace=True)
df_cpi = df_cpi.rename(columns={'今值': 'CPI'})
df_cpi_monthly = df_cpi[['CPI']]
df_cpi_monthly = df_cpi_monthly.dropna()
df_cpi_monthly.index = df_cpi_monthly.index.to_period('M')



# 读取中国M2数据，需计算M2增速
df_m2 = ac.macro_china_m2_yearly()
df_m2['M2_年增长率'] = df_m2['前值']
df_m2['日期'] = pd.to_datetime(df_m2['日期'])
df_m2.set_index('日期',inplace=True)

# M2年增长率（月度本身即为年同比）
df_m2_monthly = df_m2[["M2_年增长率"]]
df_m2_monthly.index = df_m2_monthly.index.to_period('M')
df_m2_monthly = df_m2_monthly[~df_m2_monthly.index.duplicated()]

# GDP: 国内生产总值，季调，年化，单位：十亿美元
df_gdp = pdr.get_data_fred('MKTGDPCNA646NWDB', start_date, '2025-12-1')
df_gdp['GDP'] = df_gdp['MKTGDPCNA646NWDB']
# 计算年增长率 (同比增速)
# 由于GDP是季度数据，使用 shift(4) 来获取一年前的数据
df_gdp['GDP_年增长率'] = (df_gdp['GDP'] / df_gdp['GDP'].shift(1) - 1) * 100
df_gdp = df_gdp.dropna()


# GDP年增速（源为季度，转为每月均值/插值）
df_gdp_monthly = df_gdp.resample('MS').interpolate(method='linear')
# 只保留年增长率那一列
df_gdp_monthly = df_gdp_monthly[['GDP_年增长率']]
df_gdp_monthly.index = df_gdp_monthly.index.to_period('M')

# 合并不同来源的月度数据

# 先对所有数据的索引确保是 datetime 类型且对齐
df_merge = pd.concat([
    df_nominal_rate_monthly
    , df_cpi_monthly
    ,df_m2_monthly
    ,df_gdp_monthly
    ], axis=1, join='inner')

# 实质利率 = 年名义利率 - 年CPI - (M2年增速 - GDP年增速)
df_merge['实质利率'] = (
    df_merge['名义利率'] 
    - df_merge['CPI'] 
    - (df_merge['M2_年增长率'] - df_merge['GDP_年增长率'])
)

df_merge.to_csv('data/temp/中国卢氏实质利率.csv')



plt.figure(figsize=(12, 6))
df_merge['实质利率'].plot(label='实质利率', color='red')
df_merge['名义利率'].plot(label='名义利率', color='green',alpha=0.3)
df_merge['GDP_年增长率'].plot(label='GDP年增长率', color='orange',alpha=0.3)
(-df_merge['CPI']).plot(label='CPI（负）', color='blue',alpha=0.3)
(-df_merge['M2_年增长率']).plot(label='M2年增长率（负）', color='purple',alpha=0.3)
plt.title('中国卢氏实质利率')
plt.xlabel('日期')
plt.ylabel('实质利率（%）')
plt.legend()
plt.tight_layout()
plt.savefig("data/temp/中国卢氏实质利率.svg", dpi=300, bbox_inches='tight')
plt.show()